
#include <stdio.h>  
#include <stdlib.h>  

#define MAXSIZE 100 // 假设顺序表的最大长度  

typedef struct 
{
    char data[MAXSIZE];
    int length;
} SeqList;

// 初始化顺序表  
void InitList(SeqList* L) {
    L->length = 0;
}

// 插入元素到顺序表  
int ListInsert(SeqList* L, int i, char e) {
    if (i < 1 || i > L->length + 1 || L->length >= MAXSIZE) {
        return 0; // 插入位置不合理或表满  
    }
    int j;
    for (j = L->length; j >= i; j--) {
        L->data[j] = L->data[j - 1];
    }
    L->data[i - 1] = e;
    L->length++;
    return 1;
}

// 输出顺序表  
void PrintList(SeqList L) {
	int i;
    for (i = 0; i < L.length; i++) {
        printf("%c ", L.data[i]);
    }
    printf("\n");
}

// 获取顺序表长度  
int GetLength(SeqList L) {
    return L.length;
}

// 判断顺序表是否为空  
int ListEmpty(SeqList L) {
    return L.length == 0;
}

// 获取顺序表中第i个元素  
char GetElem(SeqList L, int i) {
    if (i < 1 || i > L.length) {
        return '\0'; // 索引无效  
    }
    return L.data[i - 1];
}

// 查找元素e在顺序表中的位置  
int LocateElem(SeqList L, char e) {
	int i = 0;
    for (i = 0; i < L.length; i++) {
        if (L.data[i] == e) {
            return i + 1; // 返回位置从1开始计数  
        }
    }
    return 0; // 没找到返回0  
}

// 在顺序表的第i个位置插入元素e  
int ListInsertPos(SeqList* L, int i, char e) {
    return ListInsert(L, i, e);
}

// 删除顺序表中第i个元素  
int ListDelete(SeqList* L, int i) {
	int j,i;
    if (i < 1 || i > L->length) {
        return 0; // 删除位置不合理  
    }
    for (int j = i; j < L->length; j++) {
        L->data[j - 1] = L->data[j];
    }
    L->length--;
    return 1;
}

int main()
{
    SeqList L;
    InitList(&L); // 初始化顺序表L  

    // 依次插入元素a、b、c、d、e  
    ListInsert(&L, 1, 'a');
    ListInsert(&L, 2, 'b');
    ListInsert(&L, 3, 'c');
    ListInsert(&L, 4, 'd');
    ListInsert(&L, 5, 'e');
    printf("顺序表L: ");
    PrintList(L); // 输出顺序表L  

    printf("顺序表L的长度: %d\n", GetLength(L)); // 输出顺序表L的长度  

    if (ListEmpty(L)) {
        printf("顺序表L为空\n");
    }
    else {
        printf("顺序表L不为空\n");
    }

    printf("顺序表L中的第3个元素: %c\n", GetElem(L, 3)); // 输出顺序表L中的第3个元素  

    int pos = LocateElem(L, 'a');
    printf("元素a的位置: %d\n", pos); // 输出元素a的位置  

    // 在第4个元素的位置上插入元素f  
    ListInsertPos(&L, 4, 'f');
    printf("插入元素f后的顺序表L: ");
    PrintList(L); // 输出顺序表L  

    // 删除L中的第3个元素
}
